package myweb.myTcp;
/**
 * TCP协议：有链接，保证可靠的无误差通讯
 *  --服务器：创建一个ServerSocket，等待链接
 *  --客户机：创建一个Socket，连接到服务器
 *  服务器：ServerSocket接收到连接，创建一个Socket和客户的
 *  socket建立专线连接，后续服务器和客户机的对话(这一对Socket)
 *  会在一个单独的线程（服务器端）上运行
 *  服务器的serverSocket继续等待连接，返回到
 *
 * */

/**
 * 服务器：
 *  硬件服务器：一个很大的硬盘，性能很好的，有多个CUP
 *  软件服务器：
 *    --1.实现一个功能
 *    --2.它必须在一个公开地址上对外提供服务
 * */

/**
 * 1、ServerSocket:服务器码头
 *   用来接收所有的socket
 *   --需要绑定port
 *   --如果有多个网卡，需要绑定一个IP地址
 * Socket：运输通道
 * --客户端需要绑定服务器的地址和Port
 * --客户端往Socket输入流写入数据，送到服务器
 * --客户端从Socket输出流趣服务器端来的数据
 * 服务端反之亦然
 * */

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务端等待响应的时候，是处于阻塞状态
 * 服务端可以同时响应多个客户端
 * 客户端每接受一个客户端，就启动一个独立的线程与之对应
 * 客户端或者服务端都可以选择关闭这对Socket的通道
 * */
public class TcpServer {

    public static void main(String[] args) {
        ServerSocket ss = null;
        try {
            ss = new ServerSocket(8001);
            Socket s = ss.accept();//没有客户端会阻塞这里
            System.out.println("Welcome to the java world");
            InputStream inputStream = s.getInputStream();
            OutputStream outputStream = s.getOutputStream();
            outputStream.write("Hello ,Client".getBytes());
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            System.out.println("Client say:"+bufferedReader.readLine());
            inputStream.close();
            outputStream.close();
            s.close();
            ss.close();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

}
